package com.jxin.mall.member.domain.service;

import com.jxin.mall.member.domain.consts.AllianceTypeEnum;
import com.jxin.mall.member.domain.consts.MemberUserFileEnum;
import com.jxin.mall.member.domain.entity.MemberUser;
import com.jxin.mall.member.domain.exception.MemberUserServiceException;
import com.jxin.mall.member.service.entity.dto.req.UserLoginReqDTO;
import org.springframework.lang.Nullable;

/**
 * MemberUser表的服务接口
 * @author  蔡佳新
 * @version 1.0
 * @since   jdk 1.8
 */
public interface MemberUserService {
    /**
     * 用户登入,获取用户信息
     * @param  userLoginReqDTO  登入请求参数
     * @throws MemberUserServiceException 数据库异常
     * @return {@link MemberUser} 实例
     * @author 蔡佳新
     */
    @Nullable
    MemberUser getMemberUserWhenLogin(UserLoginReqDTO userLoginReqDTO) throws MemberUserServiceException;

    /**
     * 根据关联code获取用户信息
     * @param  code         用户关联编码
     * @param  allianceType 关联编码类型
     * @return {@link MemberUser} 实例
     * @throws MemberUserServiceException 1.关联类型超出范围 2.数据库查询异常
     * @author 蔡佳新
     */
    MemberUser getMemberUserByCode(String code, AllianceTypeEnum allianceType);
    /**
     * 创建新用户
     * @param  memberUser 用户实例
     * @throws MemberUserServiceException 数据库异常
     * @author 蔡佳新
     */
    void creatMemberUser(MemberUser memberUser) throws MemberUserServiceException;

    /**
     * 更新用户信息
     * @param  memberUser 用户实例
     * @return 创建成功返回 <code>true</code>
     * @throws MemberUserServiceException 更新数据库异常
     * @author 蔡佳新
     */
    Boolean updateMemberUserByPrimaryKey(MemberUser memberUser);

    /**
     * 判断指定属性是否存在数据
     * @param  value          参数
     * @param  memberUserFile 属性类型枚举实例
     * @throws MemberUserServiceException 1.查库异常 2.枚举类实例越界
     * @return 如果存在数据返回 <code>true</code>
     * @author 蔡佳新
     */
    Boolean isExistByField(String value, MemberUserFileEnum memberUserFile);
}
